package localentity

import (
	"fmt"
	"time"
)

const UserConfigTableDefaultName = "user_config"

// UserConfig 用户配置实体类
type UserConfig struct {
	ID          int64     `json:"id" gorm:"primaryKey;autoIncrement;comment:主键ID"`
	GroupName   string    `json:"group_name" gorm:"size:50;not null;index;comment:配置组名"`
	UserID      string    `json:"user_id" gorm:"size:100;not null;index;comment:用户ID"`
	ConfigKey   string    `json:"config_key" gorm:"size:100;not null;comment:配置键"`
	ConfigValue string    `json:"config_value" gorm:"type:text;comment:配置值"`
	CreatedAt   time.Time `json:"created_at" gorm:"autoCreateTime;comment:创建时间"`
	UpdatedAt   time.Time `json:"updated_at" gorm:"autoUpdateTime;comment:更新时间"`
	Remark      string    `json:"remark" gorm:"size:255;comment:备注"`

	tableName string // 自定义表名
}

// NewUserConfig 创建新的用户配置实体
func NewUserConfig() *UserConfig {
	return &UserConfig{
		tableName: UserConfigTableDefaultName, // 默认表名
	}
}

// TableName 设置表名
func (u UserConfig) TableName() string {
	if u.tableName != "" {
		return u.tableName
	}
	return UserConfigTableDefaultName // 默认表名
}

// SetTableName 设置自定义表名
func (u *UserConfig) SetTableName(name string) {
	u.tableName = name
}

// GetTableName 获取表名
func (u *UserConfig) GetTableName() string {
	return u.TableName()
}

// CreateTableSQL 生成创建表的SQL语句
func (u *UserConfig) CreateTableSQL() string {
	return fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s (
		id INTEGER PRIMARY KEY AUTOINCREMENT,
		group_name TEXT NOT NULL,
		user_id TEXT NOT NULL,
		config_key TEXT NOT NULL,
		config_value TEXT,
		created_at TIMESTAMP NOT NULL,
		updated_at TIMESTAMP NOT NULL,
		remark TEXT
	)`, u.TableName())
}

// Entity 实现实体接口
func (u *UserConfig) Entity() {}
